package shupaiwen;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Properties;

public class ReadinWriteout {
	
	//转换功能完成后文本最后会增加一个空段，预览功能不会如此，手动保证最后一个段落为空段，否则，最后一段不会转换
	public static String readIn(String ori,int maxcols,int space,String  code) throws IOException  {
		FileInputStream fin =null;
		int i;
		try {
			fin = new FileInputStream(ori);
		} catch (FileNotFoundException e) {
			System.out.println("file not found");
//			return;
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("out of bounds");
//			return;
		}
		int count = 0;//确定有多少段落，每个段落将作为一个字符串，并转换成竖排
		do {
			i = fin.read();
			if (i == '\n')//可以判断windows与lunix中文本的段落数
				count++;
		} while (i != -1);
		
		// FileInputStream读入的类型是byte,先读取文本
		// 多个段落使用byte二维数组存储
		fin = new FileInputStream(ori);// 需要重新读入文件，定位到文本最前端
		byte[][] by = new byte[count][0];
//		需要判断系统的类型，若是windows系统则i!='\r'|i!='\n'，lunix系统则i!='\n';
		Properties props=System.getProperties(); //获得系统属性集   
		String osName = props.getProperty("os.name"); //操作系统名称   
		if(osName.equals("Linux")||osName.equals("linux")){
			for (int j = 0; j < count;) {
				i = fin.read();
				if (i == -1)
					break;
				if (i != '\n') {
					by[j] = Arrays.copyOf(by[j], by[j].length + 1);
					by[j][by[j].length - 1] = (byte) i;
				} else
					j++;
			}
		}
		if(osName.equals("Windows")||osName.equals("windows")){
			for (int j = 0; j < count;) {
				i = fin.read();
				if (i == -1)
					break;
				if (i!='\r'|i!='\n') {
					by[j] = Arrays.copyOf(by[j], by[j].length + 1);
					by[j][by[j].length - 1] = (byte) i;
				} else
					j++;
			}
		}
		
		
		//将其转换为字符串
		String[] strs = new String[count];//存储每一段的竖排文字
		StringBuilder stb = new StringBuilder();//将所有段落的竖排文字连接成一个字符串
		for (int j = 0; j < count; j++) {
			strs[j] = new String(by[j], code);//
			//半角转全角
			strs[j] = QuanjiaoBanjiao.toquanjiao(strs[j]);
//			检查是否增加空格，并转换为竖排文字
			//对linux系统下的文本文档进行换行
			if(osName.equals("Linux")||osName.equals("linux")){
				if(space==0)
					stb.append(Shupaiban.shupaiwenzinospace(strs[j], maxcols)).append('\n');
				if(space==1)
					stb.append(Shupaiban.shupaiwenzihasspace(strs[j], maxcols)).append('\n');
			}
			//对windows系统下的文本文档进行换行
			if(osName.equals("Windows")||osName.equals("windows")){
				if(space==0)
					stb.append(Shupaiban.shupaiwenzinospace(strs[j], maxcols)).append("\r\n");
				if(space==1)
					stb.append(Shupaiban.shupaiwenzihasspace(strs[j], maxcols)).append("\r\n");
			}
		}
		String str = stb.toString();
		return str;
	}
	public static void writeOut(String dest,String s) {
		byte[] byt = s.getBytes();
		FileOutputStream fout;
		try{
			fout = new FileOutputStream(dest);
		} catch(FileNotFoundException e){
			System.out.println("error opening output file");
			return;
		} catch(ArrayIndexOutOfBoundsException e){
			System.out.println("usage:copyfile from to");
			return;
		}
//		System.out.println("正在输出文件到文本，请耐心等候");//可以根据字符数来确定是否输出
		try{
			for (int j = 0; j < byt.length; j++) {
				fout.write(byt[j]);
			}
		}catch(IOException e){
			System.out.println("file error");
		}
		System.out.println(Shupaiban.shupaiwenzinospace("感谢你使用竖排文字编辑器", 4));
		
	}
}
